要理解 Kubernetes (K8s) 的架構,我們可以將其比喻為人體:
一個典型的生產環境叢集,通常會有多個 Control Plane 節點以實現高可用性 (HA),以及更多的 Worker Node 來提供運算能力。
控制平面的所有組件協同工作,為叢集提供統一的視圖和決策中心。
kube-apiserver
:叢集的統一入口etcd
中的物件狀態。無論是使用者透過 kubectl
下達指令,還是叢集內部組件之間的溝通,都必須經過 API Server。如果它故障,您將暫時失去對整個叢集的控制能力。etcd
:叢集的記憶體etcd
的穩定性和備份是維運 K8s 最重要的任務之一。kube-scheduler
:Pod 的調度員kube-controller-manager
:狀態的維護者cloud-controller-manager
:與雲端的橋樑kube-controller-manager
中的雲端相關邏輯分離出來,使得 K8s 核心能夠獨立於各家雲平台發展。它負責處理如雲端負載平衡器、區塊儲存等資源的建立與管理。每個 Worker Node 上都運行著以下關鍵組件,負責管理在本機運行的 Pod。
kubelet
:節點上的總管kubelet
會從 API Server 接收 Pod 的規格定義 (PodSpec),並指示容器運行時 (Container Runtime) 根據這些規格來啟動、停止或重啟容器。它也負責定期向 API Server 回報 Node 和 Pod 的健康狀態。kube-proxy
:叢集的網路工程師kube-proxy
確保您能夠透過一個穩定的虛擬 IP (ClusterIP) 來存取一組 Pod,並在這些 Pod 之間進行負載平衡。它通常透過 iptables
或 IPVS
來實現這些網路規則。Container Runtime
:容器的執行者Addons 是擴展 K8s 功能的 Pod 和 Service。它們雖然不是核心組件,但對於建立一個功能完備的叢集至關重要。
您會發現,許多基礎功能(如網路、監控、日誌)K8s 本身並不提供預設的實作。這並非疏忽,而是一種刻意的設計哲學。K8s 選擇只定義標準介面(如 CNI, CSI),並將具體的實作交給廣大的社群和廠商。這種插件化的設計,催生了 K8s 豐富而強大的生態系,讓使用者可以根據自身需求,自由選擇最適合的解決方案。
理解 K8s 的架構和各組件的職責,是深入學習和有效維運 K8s 的第一步。這個分佈式系統的每一部分都各司其職,共同協作,最終為您的應用程式提供了一個強大、穩定且富有彈性的運行平台。